<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script>
		// 使用递归的方式实现深拷贝
		function deepClone1(obj) {
			//判断拷贝的要进行深拷贝的是数组还是对象，是数组的话进行数组拷贝，对象的话进行对象拷贝
			var objClone = Array.isArray(obj) ? [] : {};
			//进行深拷贝的不能为空，并且是对象或者是
			if (obj && typeof obj === "object") {
				for (key in obj) {
					if (obj.hasOwnProperty(key)) {
						if (obj[key] && typeof obj[key] === "object") {
							objClone[key] = deepClone1(obj[key]);
						} else {
							objClone[key] = obj[key];
						}
					}
				}
			}
			return objClone;
		}
		let a = [{
				name: "susu"
			},
			{
				name: "huhu"
			},
		];
		// let b = a;
		// b[0].name = '修改苏苏'
		// console.log(a)
		// console.log(b)
		
		let a0={
			name:"susu",
			box:{
				name:"box1"
			}
		};
		// let b0=a0;
		// b0.name="x修改"
		// console.log(a0)
		// console.log(b0)

		let c = deepClone1(a)
		c[0].name="xiug "
		console.log(c)
		console.log(a)
		
		// 2、通过 JSON 对象实现深拷贝
		function deepClone2(obj) {
		  var _obj = JSON.stringify(obj),
		    objClone = JSON.parse(_obj);
		  return objClone;
		}
		//JSON对象实现深拷贝的一些问题* 无法实现对对象中方法的深拷贝
		// 3、通过jQuery的extend方法实现深拷贝
		// var array = [1,2,3,4];
		// var newArray = $.extend(true,[],array);
		
		// 4.Object.assign()拷贝
		// 当对象中只有一级属性，没有二级属性的时候，此方法为深拷贝，
		// 但是对象中有对象的时候，此方法，在二级属性以后就是浅拷贝。
		
		// 5.lodash函数库实现深拷贝
		// lodash很热门的函数库，提供了 lodash.cloneDeep()实现深拷贝
		
	</script>
</html>
